#ifndef CPHOTONCACHE_H
#define CPHOTONCACHE_H

#include "cpoint3f.h"
#include "cvecteur3f.h"
#include <vector>
#include <limits>
#include <algorithm>
#include "math.h"
#include <iostream>

struct photon
{
    CPoint3f pos;
    CVecteur3f dir ;
    // vecteur normal;
    // float wattage;
    // DWORD flag;
};

struct priorityHeap
{
    float maxDistSquare;
    std::vector<std::pair<float, const photon*> > resultTab;
};

struct kdnode{
    enum {
        dimensionX = 0,
        dimensionY = 1,
        dimensionZ = 2
    } dimensionPlane;
    // float fCoordinatePlane;
    int nPhotonMedian;
};

class CPhotonCache
{
public:
    std::vector<photon> photonTab;
    std::vector<CVecteur3f> normalTab;
    std::vector<kdnode> nodeTab;
    void balance(std::vector<int>& tab, int p);
    bool bBalanced;
};

#endif // CPHOTONCACHE_H
